package huawei_nowcoder;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @Description: 密码验证合格程序
 * @Date: 2020/4/9
 * @Author: 许群星
 */
public class _20_PasswordCheck {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while (sc.hasNext()){
            String str=sc.nextLine();
            //判断长度
            if (str.length()<=8){
                System.out.println("NG");
                continue;
            }
            //判断字符
            if (!isMany(str)){
                System.out.println("NG");
                continue;
            }
            //判断子字符串
            if (!child(str)){
                System.out.println("NG");
                continue;
            }
            System.out.println("OK");
        }
    }
    //包括大小写字母.数字.其它符号,以上四种至少三种      注意使用数量比较好判断，就用特定数据
    public static boolean isMany(String str){
        int[] judge=new int[4];
        for (int i = 0; i < str.length(); i++) {
            if (Character.isDigit(str.charAt(i)))
                judge[0]=1;
            else if (Character.isUpperCase(str.charAt(i)))
                judge[1]=1;
            else if (Character.isLowerCase(str.charAt(i)))
                judge[2]=1;
            else
                judge[3]=1;
        }
        int total=0;
        for (int i = 0; i < 4; i++) {
            total+=judge[i];
        }
        return total>=3?true:false;
    }
    //不能有相同长度超2的子串重复
    public static boolean child(String str){
        List<String> list=new ArrayList<>();
        for (int i = 0; i < str.length()-3; i++) {
            String temp=str.substring(i,i+3);
            if (list.contains(temp))
                return false;
            else
                list.add(temp);
        }
        return true;
    }
}
/*
题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串

5n+w!b7$1!v+eG27pl$6e200ClB18*--286^*2!8O0
&~!z#+y(k
7Z^A-^^5Ny+
4U^^W%c!x8I(55+EQh6e(C$!6qjx%1Xz20rQ
3k01Y&5~L921B9O)13!$u
7w7gg^40e!v30Tw06QK0%J-TA05NGz3xX@#T9RG#y%

输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出：OK，否则输出NG

示例1
输入
复制
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出
复制
OK
NG
NG
OK
 */